// 得到 最小值（r[1]）及索引（r[0]） 和 最大值（r[3]）及索引（r[2]）
int * GetMinMax(int arr[], int len){
	static int r[4];
	int i;
	r[0] = r[2] = 0;
	r[1] = r[3] = arr[0];

	for (i = 1; i < len; ++i) {
		// 最小值及索引
		if (arr[i] < r[1]) {
			r[0] = i;
			r[1] = arr[i];
		}

		// 最大值及索引
		if (arr[i] > r[3]) {
			r[2] = i;
			r[3] = arr[i];
		}
	}

	return r;
}


// 冒泡排序 从小到大
void MaoPao(int arr[], int len){
	int i, j, k;
	for (i = 0; i < len; ++i) {
		for (j = i+1; j < len; ++j) {
			if (arr[i] > arr[j]) {
				k = arr[i];
				arr[i] = arr[j];
				arr[j] = k;
			}
		}
	}
}


// 选择排序 从小到大
void XuanZhe(int arr[], int len){
	int i, min, j, k;

	for (i = 0; i < len; ++i) {
		min = i;

		// 得到 i 与 末尾 的 最小值 位置
		for (j = i + 1; j < len; ++j) {
			if (arr[min] > arr[j]) {
				min = j;
			}
		}

		// 交换 i 与 最小值
		k = arr[i];
		arr[i] = arr[min];
		arr[min] = k;

	}
}


// 插入排序 从小到大 4 1 2 3
void ChaRu(int arr[], int len)
{
	int i, j, k;

	for (i = 1; i < len; ++i) {
		k = arr[i];
		for (j = i - 1; j > -1; --j) {
			if (k > arr[j]) {
				break;
			} else {
				arr[j+1] = arr[j];
				arr[j] = k;
			}
		}
	}
}


// 排序算法 demo
void SortFunction(){
	int arr[] = {4, 1, 2, 3};
	int len = (int)sizeof(arr)/sizeof(int); // 数组长度
	int *p;

	printf("测试GetMinMax()函数\n");
	p = GetMinMax(arr, len);
	printf("数组最小值索引:%d\n", p[0]);
	printf("数组最小值:%d\n", p[1]);
	printf("数组最大值索引:%d\n", p[2]);
	printf("数组最大值:%d\n\n", p[3]);
	

	printf("给数组排序\n");
	//MaoPao(arr, len); // 冒泡排序
	//XuanZhe(arr, len); // 选择排序
	ChaRu(arr, len); // 插入排序
	
	for (int i = 0; i < len; ++i) {
		printf("arr[%d] = %d\n", i, arr[i]);
	}

	
}